Amazon Connect Customer Profilesでプロフィールの有無を判別して分岐させてみた
こんにちは、洲崎です。
Amazon Connect Customer Profilesに登録されているプロフィールの有無を判別してフロー内で分岐してみました。
Amazon Connect Customer Profilesとは
Amazon Connect Customer Profilesは、各顧客の情報を一元化し、エージェントが通話しながら確認することができる機能です。
複数システムの顧客情報をAmazon Connect Customer Profilesにまとめることができます。
データソースは様々なものに対応しています。
Amazon S3も対応しているので、Amazon S3に顧客データをcsvでインポートすれば、AWSの機能のみで顧客情報を見ながら電話対応を行うことができます。
詳細や使い方についてはこちらの記事もご参照ください。
前提
Amazon Connect Customer Profilesと連係しておきます。
また、テストする電話番号でプロフィールを作成しておきます。
↑の画面は、エージェントワークスペースの画面で、Customer Profilesに登録されている情報を確認することができます。
やってみる
フロー全体
検証用のフローは以下です。
サンプルフロー(JSON)※クリックすると開きます
{
"Version": "2019-10-30",
"StartAction": "777b5f08-0484-44e5-86a0-ea66c4a67df0",
"Metadata": {
"entryPointPosition": {
"x": 40,
"y": 40
},
"ActionMetadata": {
"777b5f08-0484-44e5-86a0-ea66c4a67df0": {
"position": {
"x": 156,
"y": 40.8
}
},
"6b211db3-3cc6-4c4e-83cc-34c0e5965fbe": {
"position": {
"x": 1008,
"y": 252.8
}
},
"faefc7e9-e9ff-4e1d-a34a-0b814017998c": {
"position": {
"x": 151.2,
"y": 227.2
},
"overrideConsoleVoice": true
},
"50fd5b9f-a25c-4fa1-9048-b9af04f9c98e": {
"position": {
"x": 698.4,
"y": 38.4
}
},
"2257ce63-1ddb-4835-9d3e-d0afde54e0fc": {
"position": {
"x": 697.6,
"y": 240
}
},
"76999630-563e-48bf-aa4c-a19c0ca075bc": {
"position": {
"x": 698.4,
"y": 434.4
}
},
"3b678e8c-fac1-4897-990d-efc5bd7322fb": {
"position": {
"x": 698.4,
"y": 624
}
},
"8510cd8b-21ae-456d-937a-adf42d4162f4": {
"position": {
"x": 401.6,
"y": 102.4
},
"parameters": {
"ProfileRequestData": {
"IdentifierName": {
"displayName": "電話"
},
"IdentifierValue": {
"useDynamic": true
}
}
},
"useDynamic": {
"IdentifierName": true,
"IdentifierValue": true
},
"customerProfilesAction": "GetCustomerProfile"
}
},
"Annotations": [],
"name": "Customer Profile test",
"description": "",
"type": "contactFlow",
"status": "published",
"hash": {}
},
"Actions": [
{
"Parameters": {
"FlowLoggingBehavior": "Enabled"
},
"Identifier": "777b5f08-0484-44e5-86a0-ea66c4a67df0",
"Type": "UpdateFlowLoggingBehavior",
"Transitions": {
"NextAction": "faefc7e9-e9ff-4e1d-a34a-0b814017998c"
}
},
{
"Parameters": {},
"Identifier": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"Type": "DisconnectParticipant",
"Transitions": {}
},
{
"Parameters": {
"TextToSpeechEngine": "Neural",
"TextToSpeechStyle": "None",
"TextToSpeechVoice": "Kazuha"
},
"Identifier": "faefc7e9-e9ff-4e1d-a34a-0b814017998c",
"Type": "UpdateContactTextToSpeechVoice",
"Transitions": {
"NextAction": "8510cd8b-21ae-456d-937a-adf42d4162f4"
}
},
{
"Parameters": {
"Text": "プロフィールを取得しました。"
},
"Identifier": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"Errors": [
{
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"Text": "エラーです"
},
"Identifier": "2257ce63-1ddb-4835-9d3e-d0afde54e0fc",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"Errors": [
{
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"Text": "プロフィールが複数見つかりました。"
},
"Identifier": "76999630-563e-48bf-aa4c-a19c0ca075bc",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"Errors": [
{
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"Text": "プロフィールが見つかりませんでした。"
},
"Identifier": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"Errors": [
{
"NextAction": "6b211db3-3cc6-4c4e-83cc-34c0e5965fbe",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"ProfileRequestData": {
"IdentifierName": "_phone",
"IdentifierValue": "$.CustomerEndpoint.Address"
},
"ProfileResponseData": []
},
"Identifier": "8510cd8b-21ae-456d-937a-adf42d4162f4",
"Type": "GetCustomerProfile",
"Transitions": {
"NextAction": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
"Errors": [
{
"NextAction": "2257ce63-1ddb-4835-9d3e-d0afde54e0fc",
"ErrorType": "NoMatchingError"
},
{
"NextAction": "76999630-563e-48bf-aa4c-a19c0ca075bc",
"ErrorType": "MultipleFoundError"
},
{
"NextAction": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
"ErrorType": "NoneFoundError"
}
]
}
}
]
}
ログの記録と音声の設定を行った後に、「プロフィールを取得」ブロックで顧客の電話番号を認識し、以下のパターンごとに判別しアナウンスを変える形でテストしてみました。
- 成功
- Customer Profilesのプロフィールが1つあった場合
- テキスト:プロフィールを取得しました。
- Error
- Customer Profiles、もしくはブロックのエラー
- テキスト:エラーです。
- 複数見つかりました
- Customer Profilesのプロフィールが複数あった場合
- テキスト:プロフィールが複数見つかりました。
- 何も見つかりませんでした
- Customer Profilesのプロフィールが見つからなかった場合
- テキスト:プロフィールが見つかりませんでした。
「お客様のプロフィール」ブロック
「お客様のプロフィール」ブロックでは、以下の設定を入れています。
- アクションを選択
- プロフィールを取得
- 検索識別子
- 電話 = $.CustomerEndpoint.Address
- レスポンスフィールド
- なし
- なし
検索識別子の設定の詳細は以下です。
- 検索識別子
- 手動で設定:電話
- 識別子の値
- 名前空間:システム
- キー:顧客の電話番号
※顧客の電話番号をキーとして、Customer Profilesに登録されているか検索します。
今回は「プロフィールを取得」で、顧客情報の有無を判断する形で検証しましたが、レスポンスフィールドを利用すると、後続のフロープロックに属性を引き渡せるみたいです。
確認
実際にコールをかけてみて確認します。
共通して出力されるログ
Customer Profilesのブロックでは、共通して以下のログが出力されました。
{
"Results": "MultipleFound",
"ContactId": "fbba152d-f39a-490b-adf0-abc53753fc05",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
"ContactFlowName": "Customer Profile test",
"ContactFlowModuleType": "GetCustomerProfile",
"Identifier": "8510cd8b-21ae-456d-937a-adf42d4162f4",
"Timestamp": "2024-08-06T05:43:57.497Z",
"Parameters": {
"ProfileRequestData": [
"IdentifierName=_phone",
"IdentifierValue=+81xxxxxxxxxx"
]
}
}
"Parameters"
にある"ProfileRequestData"
で、顧客の電話番号を認識しているのがわかります。
プロフィールが1つ見つかった場合
「プロフィールを取得しました」と想定通りのアナウンスが流れる形で分岐されました。
{
"ContactId": "39d2ffac-4132-4f30-9cb1-7743b999f564",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
"ContactFlowName": "Customer Profile test",
"ContactFlowModuleType": "PlayPrompt",
"Identifier": "50fd5b9f-a25c-4fa1-9048-b9af04f9c98e",
"Timestamp": "2024-08-06T05:46:22.690Z",
"Parameters": {
"TextToSpeechType": "text",
"Text": "プロフィールを取得しました。",
"Voice": "Kazuha"
}
}
プロフィールが複数見つかった場合
1つの電話番号で複数のプロフィールが登録されている場合、「プロフィールが複数見つかりました」と想定通りのアナウンスが流れる形で分岐されました。
{
"ContactId": "fbba152d-f39a-490b-adf0-abc53753fc05",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
"ContactFlowName": "Customer Profile test",
"ContactFlowModuleType": "PlayPrompt",
"Identifier": "76999630-563e-48bf-aa4c-a19c0ca075bc",
"Timestamp": "2024-08-06T05:43:57.825Z",
"Parameters": {
"TextToSpeechType": "text",
"Text": "プロフィールが複数見つかりました。",
"Voice": "Kazuha"
}
}
プロフィールが見つからなかった場合
「プロフィールが見つかりませんでした」と想定通りのアナウンスが流れる形で分岐されました。
{
"ContactId": "a84dfc59-04df-467c-af94-063ab6c39f01",
"ContactFlowId": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/957ae315-6f56-4e06-b23b-xxxxxxxxxxxx/contact-flow/fb124270-bcc7-4d1d-852c-25c9f04b9840",
"ContactFlowName": "Customer Profile test",
"ContactFlowModuleType": "PlayPrompt",
"Identifier": "3b678e8c-fac1-4897-990d-efc5bd7322fb",
"Timestamp": "2024-08-06T05:47:30.189Z",
"Parameters": {
"TextToSpeechType": "text",
"Text": "プロフィールが見つかりませんでした。",
"Voice": "Kazuha"
}
}
最後に
Amazon Connect Customer Profilesに登録されているプロフィールの有無を判別してフロー内で分岐してみました。
一つのブロックで、顧客情報を参照してフロー内分岐できるので、とても良いです。
Lambdaなどプログラミングが不要なのも嬉しいですね。
電話と合わせて顧客情報と連係することを検討している場合、ぜひAmazon Connect Customer Profilesを試してみてください。
ではまた!コンサルティング部の洲崎でした。